home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / mods / pk232src / pk232.pas next >
Pascal/Delphi Source File  |  1986-09-14  |  14KB  |  400 lines

  1.   {.PL66}
  2.   {.IN+}
  3.   {.PO5}
  4.   {.CC#15}
  5.   {.PW132}
  6.   {.HE Split/Screen Terminalprogram for the TNC-2}
  7.   {.FO Page #}
  8.   {//////////////////////////////////////////////////////////////////////////}
  9.   {/////         Split/Screen Terminalprogram for the PK-232          ///////}
  10.   {//////////////////////////////////////////////////////////////////////////}
  11.   { This program was written by HB9CVV, most of the code (windowing, and     }
  12.   { the asynchronous Com-port server) has been adopted from existing sources }
  13.   {                                                                          }
  14.   { This module contains the TNC device-specific part                        }
  15.   {--------------------------------------------------------------------------}
  16.  
  17. PROGRAM TNC_TAPR;
  18.  
  19.     {$C-}
  20.     {$U-}
  21.     {$K-}
  22.  
  23.   CONST logo = '<<<<<<<<<< PK-232 - Terminal Server *** Sep/86 HB9CVV >>>>>>>>>>';
  24.  
  25.   CONST parfilnam = 'PK232RIG.PAR';     { filename of rig-parameter file }
  26.   CONST cmdchr = ^C;                    { get command-mode char is ctrl/c}
  27.   CONST Tnc_echo_on = True;             { echoing from PK-232 - THIS IS A MUST }
  28.  
  29.     { NOTE: Hardware-handshake by CTS (enabled by XFLOW OFF) does not work, so }
  30.     { we use XON/XOFF - consequently XFLOW mus be ON (!).                      }
  31.  
  32.   CONST Send_ok = True;                 { Send file feature enabled - }
  33.  
  34.   CONST DefPort = 1;                    { Default Com Port}
  35.   CONST DefBaud = 2400;                 { Default Baudrate}
  36.  
  37.   CONST PTOOLWIN_Number_of_Windows = 8; { Number of pop-up windows }
  38.  
  39.   TYPE Devmodenam = (VHF_PR, RF_PR, AMTOR, AMTOR_L, RTTY, MORSE, ASCII, Unknown);
  40.   VAR DevMode : DevModenam;
  41.  
  42.     {$I SSS_DECL.PAS }
  43.     {$I SSS_ASYN.PAS }                  {I/O Routines for Comm-port}
  44.     {$I SSS_PWIN.PAS }                  {PTOOLWIN functions and parameters }
  45.     {$I SSS_SUBR.PAS }                  {Common subroutines}
  46.  
  47.     {=============================================================================+
  48.     |                                                                             |
  49.     |  This Module contains device dependant routines                             |
  50.     |                                                                             |
  51.     |-----------------------------------------------------------------------------|
  52.     |                                                                             |
  53.     |  InitHelpwindows     -- define size of the three helpwindows                |
  54.     |  HelpWindow1         -- write the first helpwindow                          |
  55.     |  HelpWindow2         -- write the second helpwindow                         |
  56.     |  HelpWindow3         -- write the third helpwindow                          |
  57.     |  ResetParam          -- send commands to reset the params of the device     |
  58.     |  InitDevice          -- Initialize the device                               |
  59.     |  ShutdownDevice      -- Shut down the device                                |
  60.     |                                                                             |
  61.     +-----------------------------------------------------------------------------}
  62.  
  63.     {-----------------------------------------------------------------------+
  64.     | Define pop-up help windows                                            |
  65.     +-----------------------------------------------------------------------}
  66.  
  67.   PROCEDURE InitHelpWindows;
  68.  
  69.     BEGIN
  70.       PTOOLWIN_Screen_Type := 'X';
  71.       PTWSet(1, 12, 2, 60, 24, 1, 0, 12);
  72.       PTWSet(2, 35, 1, 75, 23, 2, 0, 14);
  73.       PTWSet(3, 25, 3, 60, 23, 2, 0, 10);
  74.       PTWSet(4, 25, 10, 58, 14, -1, 0, 10);
  75.       PTWSet(5, 20, 10, 42, 20, -1, 0, 10);
  76.     END;
  77.  
  78.     {------------------------------------------------------------------------+
  79.     | Define Help window number ONE                                          |
  80.     +------------------------------------------------------------------------}
  81.  
  82.   PROCEDURE HelpWindow1;
  83.     BEGIN
  84.       PTWOpen(1);
  85.       ClrScr;
  86.       WriteLn('C call1 v [call2 ... call9] Connect');
  87.       WriteLn('D              Disconnect');
  88.       WriteLn('CTE text       Connect Text');
  89.       WriteLn('CMSG ON|OFF    Enable/disable Ctext');
  90.       WriteLn('BTE text       Beacon text');
  91.       WriteLn('B E n          Beacon every n*10 sec');
  92.       WriteLn('CHeck n        Connect timeout, n*10 sec');
  93.       WriteLn('CONOk ON|OFF   Accept/discard connects');
  94.       WriteLn('DIGI ON|OFF    Digipeater on/off');
  95.       WriteLn('DISPLay        Parameters');
  96.       WriteLn('DWait n        Default wait time, n*10mS');
  97.       WriteLn('MCOM ON|OFF    Monitor control frames');
  98.       WriteLn('MCON ON|OFF    Monitor while connected');
  99.       WriteLn('MAXFrame 1..7  Maximum unacked frames');
  100.       WriteLn('MHeard         Display heard stations');
  101.       WriteLn('MRPT ON|OFF    Monitor repeaters');
  102.       WriteLn('MON ON|OFF     Monitor on/off');
  103.       WriteLn('RESptime n     Delaytime for acks n*100mS');
  104.       WriteLn('TXDelay n      Keying delaytime n*10mS');
  105.  
  106.       GoToXY(2, 21); Waitreturn(20000.0);
  107.       PTWClose;
  108.       TextColor(15);
  109.       TextBackground(0);
  110.     END;
  111.  
  112.     {------------------------------------------------------------------------+
  113.     | Define Help window number TWO                                          |
  114.     +------------------------------------------------------------------------}
  115.  
  116.   PROCEDURE HelpWindow2;
  117.  
  118.     BEGIN
  119.       Helpwindow3;
  120.     END;
  121.  
  122.     {------------------------------------------------------------------------+
  123.     | Reset the parameters of the DEVICE. When we do this, we at least       |
  124.     | assume that the communication to the DEVICE is working.                |
  125.     +------------------------------------------------------------------------}
  126.  
  127.   PROCEDURE RESETTNC(Filename : Maxstring);
  128.  
  129.     VAR line : Maxstring; SFile : Text;
  130.       IOR, ic, ic0, ic1 : Integer;
  131.  
  132.     PROCEDURE Comwrite(s : MaxString);  { emit a command }
  133.       VAR chx : Char;
  134.       BEGIN
  135.         Async_Send_String(s);           { send the string }
  136.         Delay(200);                     { wait for the response }
  137.         WHILE Async_Receive(chx) DO BEGIN
  138.           Write(chx); Delay(2);
  139.           IF chx = cr THEN BEGIN Write(lf); Delay(2); END;
  140.         END;
  141.       END;
  142.  
  143.     BEGIN
  144.       Assign(Sfile, Filename);
  145.       {$I-} Reset(Sfile); IOR := IOResult; {$I+}
  146.       IF IOR <> 0 THEN BEGIN
  147.         WriteLn('*** TNC-Parameter File "'+Filename+'" not found ***');
  148.         Delay(2000);
  149.       END ELSE BEGIN
  150.         Comwrite(^C);
  151.         WriteLn;
  152.         WriteLn('Resetting TNC parameters:');
  153.         WriteLn;
  154.         WHILE (NOT EoF(Sfile)) DO BEGIN
  155.           {$I-} ReadLn(Sfile, line); IOR := IOResult; {$I+}
  156.           IF IOR <> 0 THEN Exit;
  157.           ComWrite(line+cr);
  158.         END;
  159.       END;
  160.       Close(SFile);
  161.     END;
  162.  
  163.     {------------------------------------------------------------------------+
  164.     | DEVICE SPECIAL FUNCTIONS                                               |
  165.     +------------------------------------------------------------------------}
  166.  
  167.   PROCEDURE DEV_SPC_FUN(fn : Integer);
  168.     BEGIN
  169.       CASE fn OF
  170.         082   : BEGIN                     { Ins-Key (on Cursor-Pad) }
  171.                   IF DevMode = AMTOR_L THEN BEGIN { AMTOR-L: re-SYNC }
  172.                     Async_Send_String('ALIST'^M);
  173.                     Delay(100);
  174.                   END;
  175.                   IF DevMode = AMTOR THEN BEGIN { AMTOR: Force LETTERS case }
  176.                     Async_Send_String('ALIST'^M);
  177.                     Delay(100);
  178.                   END;
  179.                 END;
  180.         083   : BEGIN                     { Del-Key (on Cursor-Pad) }
  181.                   IF DevMode = AMTOR THEN BEGIN {AMTOR: Force CHANGEOVER}
  182.                     Async_Send_String(^C'ACHG'^M'CONV'^M);
  183.                     Delay(300);
  184.                   END;
  185.                 END;
  186.       END;
  187.     END;
  188.  
  189.     {------------------------------------------------------------------------+
  190.     | Routines to switch DEVIVE Modes.                                       |
  191.     +------------------------------------------------------------------------}
  192.  
  193.   PROCEDURE ModeWindow(Text : MaxString);
  194.     BEGIN
  195.       PTWOpen(4);
  196.       ClrScr;
  197.       GoToXY(2, 2); Write(' Switching device to ');
  198.       Write(Text);
  199.     END;
  200.  
  201.   PROCEDURE SDM_PR_VHF;
  202.     BEGIN
  203.       IF (DevMode = AMTOR_L) THEN BEGIN
  204.         Async_Send_String(^C^M);
  205.         Delay(200);
  206.         Async_Send_String('AMTOR'^M);
  207.         Delay(300);
  208.       END;
  209.       Modewindow('VHF-PR');
  210.       DevMode := VHF_PR;
  211.       Async_Send_String(^C^M);
  212.       Delay(200);
  213.       Async_Send_String('PACKET'^M);
  214.       Delay(200);
  215.       Async_Send_String('VHF ON'^M);
  216.       Delay(200);
  217.       Async_Send_String('HBAUD 1200'^M);
  218.       Delay(200);
  219.       Async_Send_String('FRAK 3'^M);
  220.       Delay(200);
  221.       Async_Send_String('PACLEN 255'^M);
  222.       Delay(200);
  223.       Async_Send_String('MAXFRAME 4'^M);
  224.       Delay(200);
  225.       Async_Send_String('DWAIT 16'^M);
  226.       Delay(200);
  227.       Async_Send_String('CTEXT Bin z.Zt. OFFLINE, diese Verbindung wird gespeichet. 73 de Peter.'^M);
  228.       PGMCMD_LINEOUT;
  229.       Delay(500);
  230.       Async_Purge_Buffer;
  231.       PTWClose;
  232.       Async_Send_String('DISPLAY L'^M);
  233.     END;
  234.  
  235.   PROCEDURE SDM_PR_RF;
  236.     BEGIN
  237.  
  238.       Modewindow('RF-PR');
  239.       IF DevMode = AMTOR_L THEN BEGIN
  240.         Async_Send_String(^C^M);
  241.         Delay(200);
  242.         Async_Send_String('AMTOR'^M);
  243.         Delay(300);
  244.       END;
  245.       DevMode := RF_PR;
  246.       Async_Send_String(^C^M);
  247.       Delay(200);
  248.       Async_Send_String('PACKET'^M);
  249.       Delay(200);
  250.       Async_Send_String('VHF OFF'^M);
  251.       Delay(200);
  252.       Async_Send_String('HBAUD 300'^M);
  253.       Delay(200);
  254.       Async_Send_String('FRAK 5'^M);
  255.       Delay(200);
  256.       Async_Send_String('PACLEN 80'^M);
  257.       Delay(200);
  258.       Async_Send_String('MAXFRAME 1'^M);
  259.       Delay(200);
  260.       Async_Send_String('DWAIT 0'^M);
  261.       Delay(200);
  262.       Async_Send_String('CTEXT Operator is OFFLINE, the message is recorded - 73 de Peter.'^M);
  263.       PGMCMD_LINEOUT;
  264.       Delay(500);
  265.       Async_Purge_Buffer;
  266.       PTWClose;
  267.       Async_Send_String('DISPLAY L'^M);
  268.     END;
  269.  
  270.   PROCEDURE SDM_AMTOR;
  271.     BEGIN
  272.       Modewindow('AMTOR');
  273.       DevMode := AMTOR;
  274.       Async_Send_String(^C^M);
  275.       Delay(200);
  276.       Async_Send_String('AMTOR'^M);
  277.       PGMCMD_WORDOUT;
  278.       Delay(500);
  279.       Async_Purge_Buffer;
  280.       Async_Send_String('OPMODE'^M);
  281.       PTWClose;
  282.     END;
  283.  
  284.   PROCEDURE SDM_AMTOR_L;
  285.     BEGIN
  286.       Modewindow('AMTOR-L');
  287.       DevMode := AMTOR_L;
  288.       Async_Send_String(^C^M);
  289.       Delay(200);
  290.       Async_Send_String('AMTOR'^M);
  291.       Delay(200);
  292.       Async_Send_String('ALIST'^M);
  293.       Delay(500);
  294.       Async_Purge_Buffer;
  295.       PTWClose;
  296.       Async_Send_String('OPMODE'^M);
  297.     END;
  298.  
  299.   PROCEDURE SDM_RTTY;
  300.     BEGIN
  301.       Modewindow('RTTY');
  302.       IF DevMode = AMTOR_L THEN BEGIN
  303.         Async_Send_String(^C^M);
  304.         Delay(200);
  305.         Async_Send_String('AMTOR'^M);
  306.         Delay(300);
  307.       END;
  308.       DevMode := RTTY;
  309.       Async_Send_String(^C^M);
  310.       Delay(200);
  311.       Async_Send_String('AMTOR'^M);
  312.       Delay(200);
  313.       Async_Send_String('BAUDOT'^M);
  314.       PGMCMD_WORDOUT;
  315.       Delay(500);
  316.       Async_Purge_Buffer;
  317.       PTWClose;
  318.       Async_Send_String('OPMODE'^M);
  319.     END;
  320.  
  321.   PROCEDURE SWITCH_DEV_MODE;            {ALT/F1...ALT/F10}
  322.     VAR chx, echx : Char;
  323.     BEGIN
  324.       PTWOpen(5);
  325.       ClrScr;
  326.       WriteLn;
  327.       WriteLn(' PK-232 MODE SELECT');
  328.       WriteLn;
  329.       WriteLn(' F1 -> VHF-PACKET');
  330.       WriteLn(' F2 -> RF-PACKET');
  331.       WriteLn(' F3 -> AMTOR/FEC');
  332.       WriteLn(' F4 -> AMTOR-L');
  333.       WriteLn(' F5 -> RTTY (Baudot)');
  334.       RDelay(5000.0, chx, echx);
  335.       PTWClose;
  336.  
  337.       CASE Ord(echx) OF
  338.  
  339.         59   : SDM_PR_VHF;
  340.         60   : SDM_PR_RF;
  341.         61   : SDM_AMTOR;
  342.         62   : SDM_AMTOR_L;
  343.         63   : SDM_RTTY;
  344.  
  345.       ELSE
  346.       END;
  347.     END;
  348.  
  349.     {------------------------------------------------------------------------+
  350.     | Init the DEVICE                                                        |
  351.     +------------------------------------------------------------------------}
  352.  
  353.   PROCEDURE InitDevice;
  354.  
  355.     VAR daycmdstr : STRING[40]; cha : Char;
  356.     BEGIN
  357.       IF Async_CTS_On THEN BEGIN
  358.         Async_Send_String(^Q^X);        {unlock it from possible locks}
  359.         {Wait for return strings and flush}
  360.         IF ParamStr(1) <> 'N' THEN BEGIN
  361.         Delay(500);
  362.         IF ParamStr(1) = 'R' THEN
  363.           RESETTNC('PK232.PAR');
  364.         WriteLn;
  365.         WriteLn('...please wait..!');
  366.         Async_Send_string(^C'RESTART'^M);
  367.         Delay(1000);
  368.         daycmdstr := 'DAYTIME '+qdate+qtime+^M; {set TNC's date & time}
  369.         Async_Send_String(daycmdstr);
  370.         Delay(1000);
  371.         Async_Send_String('CHSWITCH $00'^M); {Streamswitch char is ^@}
  372.         Delay(500);
  373.         Async_Send_String('XFLOW ON'^M); {SW flow control for file-send - OFF does NOT work}
  374.         Delay(500);
  375.         Async_Purge_Buffer;
  376.         DevMode := Unknown;
  377.         SDM_PR_VHF;
  378.         END;
  379.       END ELSE BEGIN
  380.         WriteLn('**** Cannot sense RTS from TNC **** Init failed, use ALT/X to exit ***');
  381.         Delay(3000);
  382.       END;
  383.     END;
  384.  
  385.     {------------------------------------------------------------------------+
  386.     | Shutdown the DEVICE.                                                   |
  387.     +------------------------------------------------------------------------}
  388.  
  389.   PROCEDURE Shutdowndevice;
  390.  
  391.     BEGIN
  392.       IF Async_CTS_On THEN BEGIN
  393.         Async_Send_String(^S);
  394.         Delay(500);
  395.         Async_Purge_Buffer;             { and flush it }
  396.       END;
  397.     END;
  398.  
  399.     {$I SSS_MAIN.PAS }
  400.